﻿#ifndef MESSAGEBOX_H
#define MESSAGEBOX_H

#include "view_global.h"
#include "FramelessWindow.h"
#include <QPushButton>
#include <QLabel>
#include <QString>
#include <QTimer>
#include <QVBoxLayout>
#include <QHBoxLayout>

/**
 * @brief 自定义消息框（基于 FramelessWindow）
 *
 * 提供现代化的消息提示对话框，支持信息、警告、错误等多种类型
 * 使用深色主题，与应用风格保持一致
 */
class VIEW_EXPORT QHMessageBox : public FramelessWindow
{
    Q_OBJECT

public:
    /**
     * @brief 消息框类型
     */
    enum MessageType {
        Information = 0,  // 信息
        Warning,          // 警告
        Error,            // 错误
        Success,          // 成功
        Question          // 询问
    };
    Q_ENUM(MessageType)

    /**
     * @brief 按钮类型
     */
    enum ButtonType {
        NoButton = 0x00000,
        Ok = 0x00001,
        Cancel = 0x00002,
        Yes = 0x00004,
        No = 0x00008
    };
    Q_DECLARE_FLAGS(ButtonTypes, ButtonType)

public:
    explicit QHMessageBox(QWidget *parent = nullptr);
    explicit QHMessageBox(const QString& title, const QString& content,
                          MessageType type = Information,
                          ButtonTypes buttons = Ok,
                          QWidget *parent = nullptr);
    virtual ~QHMessageBox();

    // 设置消息框内容
    void setTitle(const QString& title);
    void setContent(const QString& content);
    void setMessageType(MessageType type);
    void setButtons(ButtonTypes buttons);
    void setAutoClose(int seconds); // 设置自动关闭时间（秒），0表示不自动关闭

    // 获取点击的按钮
    ButtonType clickedButton() const;

    // 模拟 QDialog::exec()
    int exec();

    // 静态便捷方法
    static void information(QWidget *parent, const QString& title, const QString& content);
    static void warning(QWidget *parent, const QString& title, const QString& content);
    static void error(QWidget *parent, const QString& title, const QString& content);
    static void success(QWidget *parent, const QString& title, const QString& content);
    static bool question(QWidget *parent, const QString& title, const QString& content);

signals:
    void buttonClicked(ButtonType button);
    void accepted();
    void rejected();

private:
    void initForm();
    void initializeLayout();
    void setupTitleBar();
    void applyStyles();
    void setupAutoClose();
    void updateIcon();

    QString getIconSymbol(MessageType type);
    QString getIconColor(MessageType type);

private slots:
    void onOkClicked();
    void onCancelClicked();
    void onYesClicked();
    void onNoClicked();
    void onAutoCloseTimeout();

private:
    // UI 组件
    QWidget* backgroundWidget;
    QLabel* iconLabel;
    QLabel* titleLabel;
    QLabel* contentLabel;
    QPushButton* okButton;
    QPushButton* cancelButton;
    QPushButton* yesButton;
    QPushButton* noButton;
    QWidget* buttonContainer;
    QHBoxLayout* buttonLayout;

    // 数据
    QString m_title;
    QString m_content;
    MessageType m_type;
    ButtonTypes m_buttons;
    ButtonType m_clickedButton;
    int m_autoCloseSeconds;
    int m_result;
    QTimer* m_autoCloseTimer;

    // 常量
    static constexpr int DIALOG_MIN_WIDTH = 450;
    static constexpr int DIALOG_MIN_HEIGHT = 200;
};

Q_DECLARE_OPERATORS_FOR_FLAGS(QHMessageBox::ButtonTypes)

#endif // MESSAGEBOX_H
